package org.aerie.forest.extensions.datatransmit.rebar.dataexport.exceldata;

import java.io.OutputStream;
import java.util.List;

import org.aerie.forest.core.brick.exception.custom.ForestException;
import org.aerie.forest.core.frame.rebar.entity.processer.ProcessPack;
import org.aerie.forest.extensions.datatransmit.brick.exportdata.DerivedDataLump;
import org.aerie.forest.extensions.datatransmit.rebar.dataexport.DataExportProcessor;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * @description excel数据导出
 *
 * @author quark
 * @organization aerie
 * @date 2020年3月6日 上午11:02:50
 * @version 1.2.0
 */
public final class ExcelDataExportProcessor extends DataExportProcessor {

	/**
	 * @description 单例
	 * 
	 * @author quark
	 * @date 2020年3月6日 上午11:13:20
	 */
	private static volatile ExcelDataExportProcessor excelDataExportProcessor;

	/**
	 * Construction
	 * 
	 *
	 * @date 2020年2月28日 上午11:28:12
	 */
	private ExcelDataExportProcessor() {
		super("excel数据导出处理器");
		LOGGER.debug(LogMsgPool.INIT_COMPLETE, this.getForestRebarName());
	}

	/**
	 * @description 获得excel数据导出处理器单例
	 * @return forest配置处理器
	 *
	 * @date 2020年4月5日 下午2:46:38
	 */
	static ExcelDataExportProcessor getInstance() {
		/**
		 * 双重锁
		 */
		if (excelDataExportProcessor == null) {
			synchronized (ExcelDataExportProcessor.class) {
				if (excelDataExportProcessor == null) {
					excelDataExportProcessor = new ExcelDataExportProcessor();
				}
			}
		}
		return excelDataExportProcessor;
	}

	/**
	 * @description 生成excel表格
	 * @param outputStream 输出文件流
	 * @param dataLumps    数据块
	 * @throws Exception 生成异常
	 *
	 * @date 2020年3月7日 上午9:52:36
	 */
	public void generateExcelStream(OutputStream outputStream,
			@SuppressWarnings("unchecked") List<? extends DerivedDataLump>... dataLumps) throws Exception {
		if (null == outputStream) {
			throw new ForestException("输出流为空") {

				/**
				 * @description 序列化编号
				 * 
				 * @author quark
				 * @date 2020年3月7日 上午10:05:42
				 */
				private static final long serialVersionUID = 1L;
			};
		}
		if (null == dataLumps || dataLumps.length < 1) {
			throw new ForestException("数据库为空") {

				/**
				 * @description 序列化编号
				 * 
				 * @author quark
				 * @date 2020年3月7日 上午10:08:02
				 */
				private static final long serialVersionUID = 1L;
			};
		}
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 创建Excel工作表对象
		HSSFSheet sheet = workbook.createSheet();
		sheet.setColumnWidth(0, 3000);
		sheet.setColumnWidth(1, 5000);
		sheet.setColumnWidth(2, 4000);
		sheet.setColumnWidth(3, 2500);
		sheet.setColumnWidth(4, 3000);
		sheet.setColumnWidth(5, 6000);
		sheet.setColumnWidth(6, 6000);
		// 设定输出文件头
		workbook.write(outputStream);
		workbook.close();
	}

	@Override
	protected Object analysisPack(ProcessPack t) {
		// TODO Auto-generated method stub
		return null;
	}

}
